/*
 * @description: 
 * @Author: wzg
 * @Date: 2021-03-08 08:42:12
 * @LastEditTime: 2021-03-18 16:52:45
 */
const Koa = require('koa'); /* web框架 */
const koaBody = require('koa-body'); /* 获取body中的数据 */
const cors = require('koa-cors'); /* 解决跨域 */
const moment = require('moment'); /* 日期格式化 */
const KoaLogger = require("koa-logger"); /* 日志中间件 */

const {
  controller,
  allowedMethods
} = require('./controller');
const {
  result
} = require('./middleware/result'); /* 处理返回结果 */
const {
  catchException
} = require('./middleware/catchException'); /* 异常处理 */

const app = new Koa();

// 使用日志中间件
const logger = KoaLogger((str) => {
  /* 打印每一个请求的时间 与请求信息 */
  console.log(moment().format('YYYY-MM-DD HH:mm:ss') + str);
});
app.use(logger);

app.use(cors()); /* 解决跨域问题 */

// parse request body:
/* 使用这个中间件就可以获取body里的数据 POST,PUT传值 */
app.use(
  koaBody({
    multipart: true /* 支持文件上传 */
  })
);

/* 异常处理中间件 */
app.use(catchException);

app.use(result());

/* */
app.use(async (ctx, next) => {

  // console.log(`Process ${ctx.request.method} ${ctx.request.url}...`);
  await next();
});

// add controllers:
app.use(controller('controllers'));
app.use(allowedMethods());

// 在端口3000监听:
app.listen(3000);
console.log('app started at port 3000...');
/* 
1.获取url问号后面的值ctx.query，它会转化为一个对象
2.获取动态路由的值ctx.params
3.获取body中的数据，需要引入相关的插件koa-body即可
*/